#Requires AutoHotkey v2.0

; 创建主GUI窗口
myGui := Gui()
myGui.Title := "GUI控件演示程序"
myGui.OnEvent("Close", GuiClose)
myGui.SetFont("s10", "Segoe UI")

; 创建选项卡控件
tab := myGui.Add("Tab3", "x10 y10 w580 h380", ["基本控件", "列表相关", "其他控件"])

; 第一个选项卡 - 基本控件
tab.UseTab(1)
{
    ; 按钮组
    group1 := myGui.Add("GroupBox", "x20 y40 w240 h110", "按钮类控件")
    btnDemo := myGui.Add("Button", "x30 y60 w100 h30", "普通按钮")
    btnDemo.OnEvent("Click", (*) => MsgBox("你点击了普通按钮"))
    
    ; 复选框
    chkDemo := myGui.Add("CheckBox", "x30 y100 w120 h30", "复选框")
    chkDemo.OnEvent("Click", (*) => UpdateStatus("复选框状态: " chkDemo.Value))
    
    ; 单选按钮
    radio1 := myGui.Add("Radio", "x150 y60 w80 h30", "选项1")
    radio2 := myGui.Add("Radio", "x150 y90 w80 h30", "选项2")
    radio1.OnEvent("Click", UpdateRadio)
    radio2.OnEvent("Click", UpdateRadio)
    
    ; 输入控件组
    group2 := myGui.Add("GroupBox", "x20 y160 w240 h110", "输入控件")
    myGui.Add("Text", "x30 y180 w60 h23", "输入框:")
    editDemo := myGui.Add("Edit", "x100 y180 w150 h23")
    editDemo.OnEvent("Change", (*) => UpdatePreview())
    
    myGui.Add("Text", "x30 y210 w80 h23", "下拉列表:")
    ddlDemo := myGui.Add("DropDownList", "x100 y210 w150 h200", ["选项1", "选项2", "选项3"])
    ddlDemo.OnEvent("Change", (*) => UpdateStatus("选择: " ddlDemo.Text))
    
    ; 预览区域
    preview := myGui.Add("Edit", "x280 y40 w290 h230 ReadOnly", "只读Edit控件`n")
}

; 第二个选项卡 - 列表控件
tab.UseTab(2)
{
    ; 列表框
    listBox := myGui.Add("ListBox", "x20 y40 w200 h300", ["项目1", "项目2", "项目3"])
    listBox.OnEvent("DoubleClick", (*) => MsgBox("双击了: " listBox.Text))
    
    ; 列表视图
    lv := myGui.Add("ListView", "x240 y40 w340 h300", ["姓名", "年龄", "职业"])
    lv.Add(, "张三", 25, "工程师")
    lv.Add(, "李四", 30, "设计师")
    lv.Add(, "王五", 28, "教师")
    lv.ModifyCol(1, 100)
    lv.ModifyCol(2, "AutoHdr")
    lv.OnEvent("DoubleClick", LV_DoubleClick)
}

; 第三个选项卡 - 其他控件
tab.UseTab(3)
{
    ; 滑块控件
    myGui.Add("Text", "x20 y40 w100 h23", "滑块值:")
    sliderDemo := myGui.Add("Slider", "x120 y40 w200 h23 Tooltip", 50)
    sliderValue := myGui.Add("Text", "x330 y40 w50 h23", "50")
    sliderDemo.OnEvent("Change", UpdateSlider)
    
    ; 进度条
    progressDemo := myGui.Add("Progress", "x20 y80 w300 h20", 50)
    myGui.Add("Button", "x330 y80 w100 h23", "增加进度").OnEvent("Click", (*) => (
        progressDemo.Value += 10,
        progressDemo.Value := Mod(progressDemo.Value, 100)
    ))
    
    ; 日期选择
    myGui.Add("DateTime", "x20 y120 w150 h23", "LongDate")
    selDate := myGui.Add("Button", "x+10 yp w100 h23","显示日期")
    formattedValue := FormatTime(selDate.Value, "yyyy-MM-dd HH:mm:ss")
    selDate.OnEvent("Click", (*) => MsgBox("日期：" formattedValue))
    
    ; 树形视图
    tv := myGui.Add("TreeView", "x20 y160 w300 h200")
    p1 := tv.Add("父节点1")
    p2 := tv.Add("父节点2")
    c1 := tv.Add("子节点1", p1)
    c2 := tv.Add("子节点2", p1)
    c2c1:= tv.Add("子节点2-1", c2)
    c3 := tv.Add("子节点3", p2)
    tv.Modify(p1, "Expand")
    tv.Modify(c2, "Expand")

    btnAdd := myGui.Add("Button", "x+20 yp w100", "新增子节点")
    btnDelete := myGui.Add("Button", "xp y+10 w100", "删除节点")
    btnShowSelected := myGui.Add("Button", "xp y+10 w100", "显示选中项")
    btnToJson := myGui.Add("Button", "xp y+10 w100", "导出Json")

    ; 绑定按钮事件
    btnAdd.OnEvent("Click", AddChildNode)
    btnDelete.OnEvent("Click", DeleteNode)
    btnShowSelected.OnEvent("Click", ShowSelectedNode)
    btnToJson.OnEvent("Click", ToJson)

    
}

; 底部状态栏
statusBar := myGui.Add("StatusBar",, "就绪")
UpdateStatus(text := "就绪") => statusBar.Text := text

; 显示窗口
myGui.Show("w600 h400")

; ============================================================

; 导出Json
ToJson(*) {
    MsgBox "正在开发中..."
}

; 显示选中节点的信息
ShowSelectedNode(*){
    selectedItem := tv.GetSelection()
    if selectedItem {
        MsgBox tv.GetText(selectedItem)
    } else {
        MsgBox "未选中任何节点！"
    }
}

; 新增子节点功能
AddChildNode(*) {
    try {
        selectedItem := tv.GetSelection()
        if !selectedItem {
            MsgBox "请先选择一个父节点！", "提示", "Iconi"
            return
        }
        inputResult := InputBox("请输入新子节点名称：", "新增子节点", "w250 h150")
        if inputResult.Result = "OK" && inputResult.Value != "" {
            newNode := tv.Add(inputResult.Value, selectedItem)
            tv.Modify(selectedItem, "Expand")  ; 展开父节点
        }
    }
}

; 删除节点功能
DeleteNode(*) {
    selectedItem := tv.GetSelection()
    if !selectedItem {
        MsgBox "请先选择要删除的节点！", "提示", "Iconi"
        return
    }else{
        result := MsgBox("确定要删除该节点及其所有子节点吗？`n`t" tv.GetText(selectedItem), "确认删除", "4")
        if result = "Yes" {
            tv.Delete(selectedItem)
        }
    }
}


; 事件处理函数
UpdateRadio(*) {
    global radio1, radio2
    which := radio1.Value ? "选项1" : "选项2"
    UpdateStatus("选择了：" which)
}

UpdatePreview() {
    global editDemo, preview
    preview.Value := "当前输入内容：`n" editDemo.Value
}

UpdateSlider(*) {
    global sliderDemo, sliderValue
    sliderValue.Text := sliderDemo.Value
}

LV_DoubleClick(lv, rowNum) {
    if (rowNum > 0) {
        info := ""
        loop lv.GetCount("Col")
            info .= lv.GetText(rowNum, A_Index) "`t"
        MsgBox("当前选择：`n" info)
    }
}

GuiClose(*) {
    ExitApp
}